package main

type ListNode struct {
	Val int
	Next *ListNode
}


/*
	删除链表的倒数第 N 个结点
给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。
进阶：你能尝试使用一趟扫描实现吗？

示例 1：
输入：head = [1,2,3,4,5], n = 2
输出：[1,2,3,5]

示例 2：
输入：head = [1], n = 1
输出：[]
 */

func removeNthFromEnd(head *ListNode, n int) *ListNode {
	pre := head
	p := head
	temp := head
	for i := 1; p != nil; i ++ {
		if i > n {
			pre = pre.Next
		}
		if i > n + 1 {
			temp = temp.Next
		}
		p = p.Next
	}
	if pre == head{   // 删除头结点
		head = pre.Next
	}
	temp.Next = pre.Next
	return head
}

func main() {
	
}
